import { Dialog, Toast } from 'vant'
import config from '@/config'
import store from '@/store'

import { filterSwiper } from '@/utils/hotspot'

import { isPc, isMobile, isWxBrowser, openNewWindow, isXiaoMiPhone } from '@/utils'

import { playNavGuide, stopNavGuide } from '@/utils/scene'

import { toggleBgMusic, toggleMenuOrPointAudio } from '@/utils/audio'
import * as krpano from '@/utils/krpano'

export const getType = (type, str) => {
  return type == config.menuTypeMap[str]
}

// 过滤用户关闭的菜单
export const filterMenu = async menu => {
  if (!menu || menu.length === 0) return
  // let menu = config.defMenu
  let musicUrl = store.getters.bgMusic
  let userId = store.getters.panoInfo.user_id
  let menuData = store.getters.menuData

  // 菜单状态处理
  menu.map(item => {
    // 说一说
    if (!krpano.visibleSay()) {
      menu = menu.filter(item => !getType(item.type_id, 'isonsay'))
    }

    // VR
    if (!krpano.visibleVr()) {
      menu = menu.filter(item => !getType(item.type_id, 'showvr'))
    }

    // 弹幕
    if (!krpano.visibleBarrage()) {
      menu = menu.filter(item => !getType(item.type_id, 'showbarrage'))
    }

    // 分享 用户id: 14726 不显示 手机端不显示分享，替换成视角
    if (isMobile() || !krpano.visibleShare() || userId == '14726') {
      menu = menu.filter(item => !getType(item.type_id, 'showfx'))
    }
    // 没导航不显示菜单按钮
    if (
      isMobile() &&
      item.type_id == 'navmenu' &&
      menuData &&
      menuData.navmenu &&
      menuData.navmenu.length == 0
    ) {
      menu = menu.filter(item => item.type_id != 'navmenu')
    }

    // 背景音乐
    if (!musicUrl) {
      menu = menu.filter(item => !getType(item.type_id, 'isbgmusic'))
    }

    // 评论
    if (!krpano.visibleClear()) {
      menu = menu.filter(item => !getType(item.type_id, 'showclear'))
    }

    // 人气
    if (!krpano.visiblePraise()) {
      menu = menu.filter(item => !getType(item.type_id, 'ispraise'))
    }

    // 点赞
    if (!krpano.visibleFabulous()) {
      menu = menu.filter(item => !getType(item.type_id, 'isfabulous'))
    }

    // 收藏
    if (!krpano.visibleCollect()) {
      menu = menu.filter(item => !getType(item.type_id, 'iscollect'))
    }

    // 旋转
    if (!krpano.visibleRotate()) {
      menu = menu.filter(item => !getType(item.type_id, 'isrotate'))
    }

    // 视角
    if (!krpano.visibleVisualangle()) {
      menu = menu.filter(item => !getType(item.type_id, 'isvisualangle'))
    }

    // 多屏互动
    if (!(window.$globalconfig.MODULES.IS_SCREENOPEN && krpano.visibleMultiscreen())) {
      menu = menu.filter(item => !getType(item.type_id, 'ismultiscreen'))
    }
    if (!(window.$globalconfig.MODULES.IS_SCREENOPEN && krpano.visibleMultiscreen())) {
      menu = menu.filter(item => item.title != 'interaction')
    }

    // 小地图
    if (!isMiniMap()) {
      menu = menu.filter(item => item.type_id != 'minimap')
    }

    if (krpano.visibleClear() && item.type_id == 'clean') {
      item.isActive = true
    }

    // 电脑
    if (isPc()) {
      // 电脑版不显示陀螺仪
      menu = menu.filter(item => {
        return !getType(item.type_id, 'showgyro') && item.type_id != 'gyro'
      })

      if (krpano.visiblePcMusic() && getType(item.type_id, 'isbgmusic')) {
        item.isActive = true
      }
    }

    if (isMobile()) {
      // 手机 isbgmusic
      if (krpano.visibleMobileMusic() && getType(item.type_id, 'isbgmusic')) {
        item.isActive = true
      }
      // 陀螺仪按钮是否显示
      if (!krpano.visibleGyro()) {
        menu = menu.filter(item => !getType(item.type_id, 'showgyro'))
      }
      // 陀螺仪
      if (krpano.isGyroActive() && getType(item.type_id, 'showgyro')) {
        item.isActive = true
      }
      // 点赞
      if (item.type_id == 'praise' && $VM.$AUTH.getCookie('praisecount')) {
        item.isActive = true
      }
    }

    // 场景isonsmallscene
    if (!krpano.isSceneActive() && getType(item.type_id, 'isonsmallscene')) {
      item.isActive = true
    }

    // 自动旋转
    if (krpano.isSceneRotateActive() && getType(item.type_id, 'isonautoturn')) {
      item.isActive = true
    }
  })
  // console.log(menu)
  return menu
}

// 自定义菜单添加icon图标
const menuStrategies = {
  // 链接
  '1': function() {
    return 'icon-lianjie1'
  },
  // 图文
  '2': function() {
    return 'icon-fasongtuwen'
  },
  // 导航
  '3': function() {
    return 'icon-daohang'
  },
  // 电话
  '4': function() {
    return 'icon-telephone'
  },
  // 3d
  '5': function() {
    return 'icon-cube'
  },
  //
  '6': function() {
    return ''
  },
  //
  '7': function() {
    return ''
  },
  // 语音
  '8': function() {
    return 'icon-yuyin'
  },
  // 视频
  '9': function() {
    return 'icon-video2'
  },
  // 插件
  '10': function() {
    return 'icon-wechat'
  },
  //
  '11': function() {
    return ''
  },
  // 商品
  '12': function() {
    return 'icon-mall'
  },
  //
  '14': function() {
    return ''
  },
  //
  '15': function() {
    return ''
  },
  //
  '16': function() {
    return ''
  },
  // 幻灯片
  '17': function() {
    return 'icon-slider'
  },
  // 视频
  '18': function() {
    return 'icon-video2'
  },
  // 多功能
  '19': function() {
    return 'icon-cube'
  },
  // 关联景区(templatetype=12)
  '20': function() {
    return 'icon-moono'
  },
}

export const formatMenuIcon = function(typeId) {
  if (typeId) {
    return menuStrategies[typeId]()
  }
}

// 自定义菜单点击策略对象
export const customMenuStrategies = {
  // 链接
  '1': function(data) {
    if(data.toString().indexOf('//#') == -1){
      data =  data.replace('/#','//#')
    }
    else{
      data =  data.replace('//#','/#')
    }

    if (data.includes('.edu') ||
      data.indexOf('weixin.qq.com') != -1 || data.indexOf('weixin.com') != -1 || data.indexOf('qq.com') != -1 ||
      data.indexOf('fjnx.com') != -1
    //|| data.indexOf($globalconfig.DOMAIN) != -1
    ) {
      window.open(data)
      //window.location.href = data
      if(!isPc()) {
        setTimeout(() => {
          window.location.reload()
        }, 500)
      }
    } else {
      if (openNewWindow(data)) {
        window.open(data, '_blank')
      } else {
        if (isPc()) {
          window.open(data, '_blank')
        } else {
          $VM.$vgo.emit('iframe:link', data)
        }
      }
    }
  },
  // 图文
  '2': function(data) {
    store.dispatch('fetchGraphicData', data)
  },
  // 地图导航
  '3': function(data) {
    data = data.split('|')
    if (isWxBrowser()) {
      wx.openLocation({
        latitude: parseFloat(data[0]),
        longitude: parseFloat(data[1]),
        name: data[2],
        address: data[2],
        scale: 15,
        fail: res => {
          console.log(res)
        }
      })
    } else {
      let dataMap = `https://uri.amap.com/marker?position=${data[1]},${
        data[0]
      }&name=${
        data[2]
      }&radius=110&src=mypage&coordinate=gaode&callnative=0&key=b65d581a9e00d6952661f5e0056e3649`
      $VM.$vgo.emit('iframe:map', dataMap)
    }
  },
  // 电话
  '4': function(data) {
    if (isMobile()) {
      Dialog.confirm({
        title: '联系我们',
        message: `<a style="color:red" href="tel:${data}">拨打电话: ${data}</a>`
      }).then(() => {
        window.location.href = `tel:${data}`
      })
    } else {
      $VM.$vgo.emit('modal:tel', data)
    }
  },
  // 3d
  '5': function(data) {
    $VM.$vgo.emit('iframe:3d', data)
  },
  // 语音
  '8': function(data) {
    if (data.indexOf('|') !== -1) {
      data = data.split('|')[1]
    }
    // 判断是否全路径
    data = data.indexOf('http') > -1 ? data : $globalconfig.URLS.API + data

    // 修复图标状态
    toggleMenuOrPointAudio(data)
  },
  // 插件
  '10': function(data) {
    if (isMobile()) {
      window.open(data, '_blank')
      // window.location.href = data
    } else {
      $VM.$vgo.tip('请在微信中打开', 'warning')
    }
  },
  // 商品
  '12': function(data) {
    store.dispatch('fetchGoodsData', data)
    if (!isMobile()) {
      $VM.$vgo.emit('modal:goods')
    } else {
      $VM.$router.push(
        `/panoview/${$VM.$route.params.panoId}/goods-detail?id=${data}`
      )
    }
  },
  // 幻灯片
  '17': function(data) {
    $VM.$vgo.emit('iframe:swiper', filterSwiper(data))
  },
  // 视频
  '18': function(data) {
    $VM.$vgo.emit('iframe:video', data)
  },
  // 多功能
  '19': function(data) {
    // console.log(data)
    $VM.$vgo.emit('dialog:mutil', {data: data})
  },
}

// 自定义底部菜单点击
export const handleCustomMenu = item => {
  let data
  // 图文
  if (
    item.type_id == 1 ||
    item.type_id == 2 ||
    item.type_id == 3 ||
    item.type_id == 8 ||
    item.type_id == 10 ||
    item.type_id == 18 ||
    item.type_id == 19
  ) {
    data = item.data
  } else {
    data = item.datastr
  }
  customMenuStrategies[item.type_id](data)
}

// 系统菜单策略对象
let commentsBtn = true
const systemStrategies = {
  scene: function() {
    // 显示隐藏场景
    $VM.$vgo.emit('scene:toggle')
  },
  gyro: function() {
    // 陀螺仪
    $VM.$krp.callScene('skin_switch_gyro();')
    let msg = $VM.$krp.getSceneData('plugin[skin_gyro].enabled')
      ? '陀螺仪开启'
      : '陀螺仪关闭'
    $VM.$vgo.tip(msg, 'success')
  },
  vr: function() {
    // VR
    $VM.$krp.showVR()
  },
  say: function() {
    // 发表说一说
    if ($VM.$AUTH.checkLogin()) {
      $VM.$vgo.emit('say:show')
    }
  },
  reward: function() {
    // 打赏
    if ($VM.$AUTH.checkLogin()) {
      $VM.$vgo.emit('payreward:show')
    }
  },
  carts: function() {
    // 购物车
    if ($VM.$AUTH.checkLogin()) {
      $VM.$vgo.emit('cart:show')
    }
  },
  ticket: function() {
    // 微信卡券
    if ($VM.$AUTH.checkLogin()) {
      $VM.$router.push(`/panoview/${store.getters.panoId}/cardlist`)
    }
  },
  clean: function() {
    // 清屏
    let msg = commentsBtn ? '评论已隐藏' : '评论已显示'
    commentsBtn ? $VM.$krp.hideComments() : $VM.$krp.showComments()
    $VM.$vgo.tip(msg, 'success')
    commentsBtn = !commentsBtn
  },
  share: function() {
    // 分享
    $VM.$vgo.emit('model:share')
  },
  barrage: function() {
    // 弹幕
    store.dispatch('toggleBarrage')
  },
  rotate: function() {
    // 自动旋转
    $VM.$krp.autoRotate()
  },
  bgmusic: function() {
    // 背景音乐
    // if (isXiaoMiPhone()) {
    //   $VM.$vgo.emit('music:toggle-play')
    // } else {
    toggleBgMusic(true)
    // }
  },
  navmenu: function() {
    $VM.$vgo.emit('navmenu:left')
  },
  view: function() {
    // 视角
    $VM.$vgo.emit('showPerspectiveMenu')
  },
  minimap: function() {
    $VM.$vgo.emit('minimap:toggle')
  },
  praise: function() {
    // 点赞
    if ($VM.$AUTH.checkLogin()) {
      const panoId = store.getters.panoId
      let userId = 0
      if (store && store.getters && store.getters.userInfo) {
        userId = store.getters.userInfo.user_id
      }
      let praiseCK = $VM.$AUTH.getCookie('praisecount')

      let ckPanoId = praiseCK.split('|')[0]
      let ckUserId = praiseCK.split('|')[1]

      if (userId != ckUserId || panoId != ckPanoId) {
        store.dispatch('addPraise')
      } else {
        $VM.$vgo.tip('今天已赞过了')
        return
      }
    }
  },
  collect: function() {
    if ($VM.$AUTH.checkLogin()) {
      store.dispatch('addCollection')
    }
  },
  sayE: function() {
    // 发表说一说
    if ($VM.$AUTH.checkLogin()) {
      $VM.$vgo.emit('sayE:show')
    }
  },
  full: function() {
    // 全屏
    $VM.$krp.toggleFull()
  },
  interaction() {
    if(!$VM.$AUTH.checkLogin()) return
    require('@/components/new-comps/screen-sync/').default.open()
  }
}

// 系统底部菜单点击处理
export const handleSystemMenu = item => {
  systemStrategies[item.type_id]()
}

export const filterToolsBarMenu = () => {
  let menu = config.toolsBarMenu
  let mapData = store.getters.miniMapData
  const navGuideList = store.getters.navGuideData
  const menuData = store.getters.menuData
  // 如果电脑端或者不是第二套皮肤隐藏toolsbar的导航菜单
  // getPlatform() || store.getters.themeId != 1

  // 手机端第四套皮肤右侧展示bottommenu数据，其他皮肤展示navmenu数据，pc端不显示按钮(navmenu)
  if (store && store.getters && store.getters.themeId == 3) {
    if (
      !isMobile() ||
      !menuData ||
      !menuData.bottommenu ||
      !menuData.bottommenu.length
    ) {
      menu = menu.filter(item => item.title != 'navmenu')
    }
  } else {
    if (
      !isMobile() ||
      !menuData ||
      !menuData.navmenu ||
      !menuData.navmenu.length
    ) {
      menu = menu.filter(item => item.title != 'navmenu')
    }
  }

  // 多屏互动
  if (!(window.$globalconfig.MODULES.IS_SCREENOPEN && krpano.visibleMultiscreen())) {
    menu = menu.filter(item => !getType(item.type_id, 'ismultiscreen'))
  }
  if (!(window.$globalconfig.MODULES.IS_SCREENOPEN && krpano.visibleMultiscreen())) {
    menu = menu.filter(item => item.title != 'interaction')
  }

  let minimapFlag = null
  // 有小地图且地图场景不为空
  if (mapData && mapData.length > 0) {
    minimapFlag = mapData.filter(item => item.mappointList.length > 0)[0]
  }
  // 小地图
  if (!hasMiniMap()) {
    menu = menu.filter(item => item.title != 'minimap')
  }

  // 一键导览
  if (navGuideList && !navGuideList.length) {
    menu = menu.filter(item => item.title != 'navguide')
  }

  // 作品集
  if (!store.getters.worksData || !store.getters.worksData.length) {
    menu = menu.filter(item => item.title != 'works')
  }

  // 清屏
  if (!krpano.visibleClear()) {
    menu = menu.filter(item => !getType(item.type_id, 'showclear'))
  }

  // 旋转
  if (!krpano.visibleRotate()) {
    menu = menu.filter(item => !getType(item.type_id, 'isrotate'))
  }

  // 视角
  if (!krpano.visibleVisualangle()) {
    menu = menu.filter(item => !getType(item.type_id, 'isvisualangle'))
  }

  // 多屏互动
  if (!krpano.visibleMultiscreen()) {
    menu = menu.filter(item => !getType(item.type_id, 'ismultiscreen'))
  }

  return menu
}

// toolsbar策略对象
let navGuideBtn = true
const toolsBarStrategies = {
  navmenu() {
    console.log('25------------')
    let themeId = store.getters.themeId
    // console.log(themeId)
    // 从底部浮出
    if (themeId == 1 || themeId == 3 || themeId == 0 || themeId == 2) {
      $VM.$vgo.emit('navmenu:bottom', themeId)
    }
    // if (themeId == 0 || themeId == 2) {
    //   $VM.$vgo.emit('navmenu:left')
    // }
  },
  usercenter() {
    if ($VM.$AUTH.checkLogin()) {
      $VM.$vgo.emit('order:usercenter')
      store.dispatch('fetchUserOrder')
    }
  },
  minimap() {
    $VM.$vgo.emit('minimap:toggle')
  },
  navguide(status) {
    status ? playNavGuide() : stopNavGuide()
    navGuideBtn = !navGuideBtn
  },
  works() {
    $VM.$vgo.emit('works:show')
  },
  scene() {
    $VM.$vgo.emit('scene:toggle')
  },
  interaction() {
    if(!$VM.$AUTH.checkLogin()) return
    require('@/components/new-comps/screen-sync/').default.open()
  },
  clean() {
    // 清屏
    let msg = commentsBtn ? '评论已隐藏' : '评论已显示'
    commentsBtn ? $VM.$krp.hideComments() : $VM.$krp.showComments()
    $VM.$vgo.tip(msg, 'success')
    commentsBtn = !commentsBtn
  },
  rotate: function() {
    // 自动旋转
    $VM.$krp.autoRotate()
  },
  view: function() {
    // 视角
    // $VM.$vgo.emit('showPerspectiveMenu')
    $VM.$vgo.emit('navmenu:bottom', 'view')
  },
}

// toolsbar
export const handleToolsBar = item => {
  item.isActive = !item.isActive
  toolsBarStrategies[item.title](item.isActive)
}

// 作品是否有小地图
const isMiniMap = () => {
  let mapData = store.getters.miniMapData
  let minimapFlag = null
  // 有小地图且地图场景不为空
  if (mapData && mapData.length > 0) {
    minimapFlag = mapData.filter(item => item.mappointList.length > 0)[0]
  }
  return minimapFlag
}

// 是否有小地图数据
export const hasMiniMap = sceneId => {
  sceneId = sceneId || $VM.$krp.getSceneId()
  const mapData = store.getters.miniMapData
  let data
  if (mapData && mapData.length) {
    mapData.map((g, gidx) => {
      g.mappointList.map((it, idx) => {
        if (it.scene_id == sceneId) {
          data = mapData[gidx]
        }
      })
    })
  }

  return data ? { sceneId: sceneId, miniMapObj: data } : null
}

// 判断templatetype=5是否有侧边栏菜单小地图
export const hasMiniMap5 = sceneId => {
  sceneId = sceneId || $VM.$krp.getSceneId()
  const mapData = store.getters.miniMapData
  let data = false
  if (mapData && mapData.length) {
    data = true
  }

  return data
}

// 提交说一说
export const handleSubmitSay = text => {
  // let location = $VM.$krp.getView()
  let sceneId = $VM.$krp.getSceneName().split('_')[1]
  let dragLocation = $VM.$krp.getSayLocation()
  // console.log(dragLocation)
  let avatar = (store && store.getters && store.getters.userInfo) ? (store.getters.userInfo.full_avatar || store.getters.userInfo.avatar) : ''
  let nickname = (store && store.getters && store.getters.userInfo) ? store.getters.userInfo.nickname : ''
  let openid = (store && store.getters && store.getters.userInfo) ? store.getters.userInfo.wx_openid : ''
  let options = {
    pano_id: store.getters.panoId,
    scene_id: sceneId,
    openid: openid,
    avatar: avatar,
    nickname: nickname,
    content: text,
    ath: dragLocation.ath,
    atv: dragLocation.atv,
    // ath: String(Number(dragLocation.ath) - 15.2),
    // atv: String(Number(dragLocation.atv) - 7.2),
  }
  // console.log(options)
  store.dispatch('addComment', options)
  $VM.$krp.removeDragSayModel()

  // weix高版本输入后没有收起键盘问题
  setTimeout(function() {
    window.scrollTo(0, 0)
  }, 100)
}
